package com.hadoop.mr.wordcount;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/**
 * 1.MR框架由两个核心组件，分别是Mapper组件和Reducer组件
 * 2.写一个类，继承Mapper，则变成了一个Mapper组件类
 * 3.LongWritable,Text（String),IntWritable,NullWritable等是Hadoop的序列化类型
 * 4.Mapper组件将每行的行首偏移量，作为输入key，通过map（）传给程序员
 * 5.Mapper组件会将每行内容，作为输入value，通过map（）传给程序员，重点是获取输入value。
 * 6.Mapper的第一个泛型类型对应的是输入key的类型，第二天个泛型类型对应的输入value
 * 在初学阶段，第一个和第二个类型写死。
 * 7.MR框架所处理的文件必须是在HDFS上的。
 * 8.map()被调用几次，取决于文件的行数。
 * 9.通过context进行结果的输出，以输出key和输出value的形式来输出
 * 10.输出key是由第三个泛型类型决定，输出value是由第四个泛型类型决定。
 * 
 * 11.输出结果文件的数据以及行数取决于context.write
 * 12.Text=>String:  value.toString()。
 * 13.String=>Text:  new Text(string var)
 * 14.LongWritable=>long:  key.get()
 * 15.long=>Writable: new LongWritable(long var)
 * 
 * 课堂案例1:
 * hello world
   hello hadoop
   hello 1606
   hello world
   输出的结果文件形式：
   hello 1
   world 1
   hello 1
   hadoop 1
   hello 1
   1606 1
   hello 1
   world 1
 * 
 * 
 * @author ysq
 *
 */
public class WordCountMapper extends Mapper<LongWritable,Text,Text,IntWritable>{
	@Override
	protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
			throws IOException, InterruptedException {
		String line=value.toString();
		String[] data=line.split(" ");
		for(String word:data){
			context.write(new Text(word), new IntWritable(1));
		}
	}
}
